<?php

/**
 * EntrarForm class.
 * EntrarForm is the data structure for keeping
 * user login form data. It is used by the 'login' action of 'SiteController'.
 */
class EntrarForm extends CFormModel
{

    public $usuario;
    public $senha;
    public $lembrar;
    private $_identity;

    public function rules()
    {
        return array(
            array('usuario, senha', 'required'),
            array('lembrar', 'boolean'),
            
            array('senha', 'authenticate'),
        );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels()
    {
        return array(
            'usuario' => 'Usuário',
            'senha'   => 'Senha',
            'lembrar' => 'Lembrar-me'
        );
    }

    /**
     * Autentica a senha.
     * Os validadores são declarados no metodo rules().
     */
    public function authenticate($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $this->_identity = new UserIdentity($this->usuario, $this->senha);
            if (!$this->_identity->authenticate()) {
                switch ($this->_identity->errorCode) {
                    case UserIdentity::ERROR_USERNAME_INVALID:
                        $this->addError('usuario', 'Usuário não encontrado');
                        break;
                    case UserIdentity::ERROR_PASSWORD_INVALID:
                        $this->addError('senha', 'Senha incorreta');
                        break;
                }
                
            }
        }
    }

    /**
     * Logs in the user using the given username and password in the model.
     * @return boolean whether login is successful
     */
    public function entrar()
    {
        if ($this->_identity === null) {
            $this->_identity = new UserIdentity($this->usuario, $this->senha);
            $this->_identity->authenticate();
        }
        if ($this->_identity->errorCode === UserIdentity::ERROR_NONE) {
            $duration = $this->lembrar ? 0 : 3600 * 24; // 1 dia 
            Yii::app()->user->login($this->_identity, $duration);
            return true;
        } else
            return false;
    }

}
